package cn.minhx.dtm.starter.core.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 分布式事务注解，用于标记需要通过本地消息表实现最终一致性的方法
 *
 * <p>
 * 该注解应用于方法上，被注解的方法发起调用时将保存到本地消息表中， 然后由定时任务异步处理，确保分布式事务的最终一致性
 *
 * @author min
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DistributedTransaction {

	/** 最大重试次数，超过该次数仍未成功的事务将不再重试 */
	int maxRetries() default 3;

	/** 是否异步执行（默认 true） 如果为false，则在当前线程执行一次 */
	boolean async() default true;

	/** 任务超时时间，单位为秒 */
	int timeout() default 30;

	/** 重试间隔时间，单位为秒（默认 10 分钟） */
	int interval() default 600;

	/** 事务处理优先级，数值越小优先级越高 */
	int priority() default 5;
}
